#ifndef _NE_GEOMETRY_H_
#define _NE_GEOMETRY_H_

#include <mathematics/Vector2.h>
#include <mathematics/Color.h>

namespace ne
{
    enum GeometryClass
    {
        GC_TRIANGLE = 1,
        GC_RECTANGLE,
        GC_POLYGON,
        GC_CIRCLE,
        GC_RING
    };

    enum GeometryStyle
    {
        GS_POINT = 0x1,
        GS_WIRE = 0x2,
        GS_SOLID = 0x4
    };

    class NEAPI Geometry
    {
        public:
            Geometry(const GeometryStyle gs=GS_SOLID, const Color &c=Color::WHITE, const Color &borderColor=Color::GRAY);

            Geometry(const Geometry &g);

            Geometry& operator = (const Geometry &g);

            void setStyle(const GeometryStyle gs);

            GeometryStyle getStyle() const;

            void setColor(const Color &c);

            Color getColor() const;

            void setBorderColor(const Color &c);

            Color getBorderColor() const;

            virtual GeometryClass getClass() const = 0;

            virtual ~Geometry();

        protected:
            GeometryStyle mStyle;
            Color mColor;
            Color mBorderColor;
    };
}

#endif
